package BakaNoPackage.Donnees;

import BakaNoPackage.Exception.EntiteExistantException;
import BakaNoPackage.Exception.EntiteIntrouvableException;
import BakaNoPackage.Exception.SaisonIntrouvableException;

/**
 * 
 * @author Nicolas Muller
 * @date 04.12.2008
 *
 *	Symbolise une Saison d'un manga
 */

public class Saison {
	private int id;
	private int idManga;
	private String nom;
	private String commentaire;
	private String synopsis;
	private java.util.Date date_sortie;
	private Integer evaluation;
	
	private Donnees donnees;
	
	
	
	/**
	 * 
	 * Constructeur: Seul l'id et le nom sont nécessaires
	 * 
	 * @param id id de l'objet
	 * @param nom nom de la saison
	 * @param commentaire commentaire sur la saison
	 * @param synopsis deescription
	 * @param date_sortie date de sortie
	 * @param evaluation note attribuée
	 * @param donnees Base de données de travail
	 */
	public Saison(int id, String nom, String commentaire, String synopsis,
			java.util.Date date_sortie, Integer evaluation, Donnees donnees) {
		super();
		this.id = id;
		this.nom = nom;
		this.commentaire = commentaire;
		this.synopsis = synopsis;
		this.date_sortie = date_sortie;
		this.evaluation = evaluation;
		this.donnees = donnees;
	}
	
	/**
	 * Donne l'identificateur de la saison
	 * @return l'identificateur de la saison
	 */
	public int getID(){
		return this.id;
	}
	
	
	/**
	 * Donne l'Identificateur du manga père
	 * 
	 * @return Identificateur
	 */
	public int getIdManga() {
		return idManga;
	}



	/**
	 * Modifie l'identificateur du manga père
	 * 
	 * @param idManga
	 */
	public void setIdManga(int idManga) {
		this.idManga = idManga;
	}



	/**
	 * Recupère une entite de la saison
	 * @param nom
	 * @return
	 * @throws SaisonIntrouvableException 
	 * @throws SaisonIntrouvableException
	 */
	public Entite getEntite(String nom) throws EntiteIntrouvableException, SaisonIntrouvableException{

			return donnees.getEntite(id, nom);

	}
	
	
	/**
	 * Retourne la liste des entites de la saison
	 * @return toutes les entites de la saison
	 */
	public Entite[] getEntites(){
		try{
			return donnees.getEntites(id);
		}catch(SaisonIntrouvableException e){
			return null;
		}catch(EntiteIntrouvableException e){
			return null;
		}
	}
	
	
	/**
	 * Retourne le nom de la saison
	 * @return nome de la saison
	 */
	public String getNom(){
		return this.nom;
	}
	
	/**
	 * Définit le nom de la saison
	 * @param nom nouveau nom
	 * @throws SaisonIntrouvableException 
	 */
	public void setNom(String nom){
		this.nom = nom;
		updateDB();
	}
	
	/**
	 * Retourne le synopsis de la saison
	 * @return
	 */
	public String getSynopsis(){
		return this.synopsis;
	}
	
	/**
	 * Définit le synopsis de la saison
	 * @param synopsis
	 * @throws SaisonIntrouvableException 
	 */
	public void setSynopsis(String synopsis){
		this.synopsis = synopsis;
		updateDB();
	}
	
	/**
	 * Retourne le commentaire de la saison
	 * @return
	 */
	public String getCommentaire(){
		return this.commentaire;
	}
	
	/**
	 * Définit le commentaire de la saison
	 * @param commentaire
	 * @throws SaisonIntrouvableException 
	 */
	public void setCommentaire(String commentaire){
		this.commentaire = commentaire;
		updateDB();
	}
	
	/**
	 * Retourne la date de sortie de la saison
	 * @return
	 */
	public java.util.Date getDateSortie(){
		return this.date_sortie;
	}
	
	/**
	 * Définit la date de sortie de la saison
	 * @param date
	 * @throws SaisonIntrouvableException 
	 */
	public void setDateSortie(java.util.Date date){
		this.date_sortie = date;
		updateDB();
	}
	
	/**
	 * Retourne l'évaluation de la saison
	 * @return
	 */
	public int getEvaluation(){
		return evaluation;
	}
	
	/**
	 * Définit l'évaluation de la saison
	 * @param evaluation
	 * @throws SaisonIntrouvableException 
	 */
	public void setEvaluation(int evaluation){
		this.evaluation = evaluation;
		updateDB();
	}
	
	/**
	 * Met à jour les informations vers la base de données
	 * @throws SaisonIntrouvableException 
	 */
	private void updateDB(){
		try{
			donnees.setSaison(this);
		}catch(Exception e){}
		
	}
	
	/**
	 * Créé un tome
	 * 
	 * @param nom
	 * @return le tome créé
	 * @throws EntiteExistantException
	 */
	public Tome creerTome(String nom) throws EntiteExistantException{
		return donnees.createTome(id, nom);
	}
	
	/**
	 * Créé un épisode
	 * 
	 * @return l'épisode créé
	 * @throws EntiteExistantException
	 */
	public Episode creerEpisode(String nom) throws EntiteExistantException{
		
		return donnees.createEpisode(id, nom);
	}
	
	public void delEntite(Entite e) throws Exception{
		e.delete();
	}
	
	public String toString(){
		String retour = "Saison " + this.getNom();
		retour += "\nDate: "+ this.getDateSortie();
		retour += "\nEvaluation: " + this.getEvaluation();
		retour += "\nCommentaire: " + this.getCommentaire();
		retour += "\nSynopsis: "+this.getSynopsis();
		return retour;
	}
}
